<?php

namespace IDock\IDock;

use IDock\Visitor\EPolicyDownloadVisitor;
use IDock\Visitor\NonCar\NonCarInquiryVisitor;
use IDock\Visitor\NonCar\NonCarProductListVisitor;
use IDock\Visitor\PolicyInfoVisitor;
use IDock\Visitor\PolicyPaymentVisitor;
use IDock\Visitor\Premium\PremiumInquiryVisitor;
use IDock\Visitor\ProposalRecallVisitor;
use IDock\Visitor\ProposalStatusVisitor;
use IDock\Visitor\RenewalInquiryVisitor;
use IDock\Visitor\UnderwritingRecallVisitor;
use IDock\Visitor\UploadFileVisitor;
use IDock\Visitor\ValidateCarVisitor;
use IDock\Visitor\VehicleActualValueVisitor;
use IDock\Visitor\VehicleModelVisitor;

interface IDockInterface
{
    /**
     * 续保查询
     * @param RenewalInquiryVisitor $renewalInquiryVisitor
     * @return mixed
     */
    public function renewalInquiry(RenewalInquiryVisitor $renewalInquiryVisitor);

    /**
     * 车型查询
     * @param VehicleModelVisitor $vehicleModelVisitor
     * @return mixed
     */
    public function vehicleModel(VehicleModelVisitor $vehicleModelVisitor);

    /**
     * 车辆实际价格
     * @param VehicleActualValueVisitor $vehicleActualValueVisitor
     * @return mixed
     */
    public function vehicleActualValue(VehicleActualValueVisitor $vehicleActualValueVisitor);

    /**
     * 询价前置
     * @param PremiumInquiryVisitor $premiumInquiryVisitor
     * @return mixed
     */
    public function preInquiry(PremiumInquiryVisitor $premiumInquiryVisitor);

    /**
     * 保费计算
     * @param PremiumInquiryVisitor $premiumInquiryVisitor
     * @return mixed
     */
    public function premiumInquiry(PremiumInquiryVisitor $premiumInquiryVisitor);

    /**
     * 非车
     * @param PremiumInquiryVisitor $premiumInquiryVisitor
     * @return mixed
     */
    public function validateCar(PremiumInquiryVisitor $premiumInquiryVisitor);

    /**
     * 核保
     * @param PremiumInquiryVisitor $premiumInquiryVisitor
     * @return mixed
     */
    public function underwriting(PremiumInquiryVisitor $premiumInquiryVisitor);

    /**
     * 保单支付
     * @param PolicyPaymentVisitor $paymentVisitor
     * @return mixed
     */
    public function policyPayment(PolicyPaymentVisitor $paymentVisitor);

    /**
     * 文件上传
     * @param UploadFileVisitor $uploadFileVisitor
     * @return mixed
     */
    public function uploadFile(UploadFileVisitor $uploadFileVisitor);

    /**
     * 投保单查询
     * @param ProposalStatusVisitor $proposalStatusVisitor
     * @return mixed
     */
    public function proposalStatus(ProposalStatusVisitor $proposalStatusVisitor);

    /**
     * 撤单
     * @param ProposalRecallVisitor $revokeVisitor
     * @return mixed
     */
    public function proposalRecall(ProposalRecallVisitor $revokeVisitor);

    /**
     * 核保撤回
     * @param UnderwritingRecallVisitor $recallVisitor
     * @return mixed
     */
    public function underwritingRecall(UnderwritingRecallVisitor $recallVisitor);

    /**
     * 电子保单下载
     * @param EPolicyDownloadVisitor $EPolicyVisitor
     * @return mixed
     */
    public function EPolicyDownload(EPolicyDownloadVisitor $EPolicyVisitor);

    /**
     * 保单查询
     * @param PolicyInfoVisitor $policyInfoVisitor
     * @return mixed
     */
    public function policyInfo(PolicyInfoVisitor $policyInfoVisitor);

    /**
     * 非车产品列表
     * @param NonCarProductListVisitor $nonCarProductListVisitor
     * @return mixed
     */
    public function nonCarProductList(NonCarProductListVisitor $nonCarProductListVisitor);

    /**
     * 非车询价
     * @param NonCarInquiryVisitor $nonCarInquiryVisitor
     * @return mixed
     */
    public function nonCarInquiry(NonCarInquiryVisitor $nonCarInquiryVisitor);

    /**
     * 非车核保
     * @param NonCarInquiryVisitor $inquiryPrinter
     * @return mixed
     */
    public function nonCarUnderwriting(NonCarInquiryVisitor $inquiryPrinter);

    /**
     * 验车接口
     * @param ValidateCarVisitor $validateCarVisitor
     * @return mixed
     */
    public function validateCarCode(ValidateCarVisitor $validateCarVisitor);

    /**
     * 新车备案
     * @return mixed
     */
    public function newVehicleRegistration(PremiumInquiryVisitor $premiumInquiryVisitor);
}
